/*
*  This file is part of mangusta
*
*  mangusta is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  mangusta is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with mangusta; if not, write to the Free Software
*  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  US
*
*  Author: <antonino.calderone@ericsson.com>, <acaldmail@gmail.com>
*
*/


/* -------------------------------------------------------------------------- */

#include "nu_functions.h"
#include <string>

/* -------------------------------------------------------------------------- */

namespace nu
{


/* -------------------------------------------------------------------------- */

bool module_t::import_module(const std::string & name)
{
   auto & modules = functions_t::get_instance()._modules;

   auto it = modules.find(name);

   if (it == modules.end())
      return false;

   auto module_ptr = it->second;

   assert(module_ptr);

   return module_ptr->load();
}


/* -------------------------------------------------------------------------- */

bool module_t::import_all()
{
   auto & modules = functions_t::get_instance()._modules;

   bool res = true;

   for (auto it = modules.begin(); it != modules.end(); ++it)
   {
      auto module_ptr = it->second;
      assert(module_ptr);

      if (!module_ptr->load())
         res = false;
   }

   return res;
}


/* -------------------------------------------------------------------------- */

bool module_t::add_module(module_t * module_ptr, const std::string & name)
{
   auto & modules = functions_t::get_instance()._modules;

   auto it = modules.find(name);

   if (it != modules.end())
      return false;

   modules[name] = module_ptr;

   return true;
}


/* -------------------------------------------------------------------------- */

} // nu

